/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package formularze;

import bazy.HibernateUtil;
import bazy.SpecyfikacjaZamowienia;
import bazy.Zalaczniki;
import bazy.Zamowienia;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Iterator;
import logowanie.LogBean;
import javax.inject.Named;
import javax.enterprise.context.SessionScoped;
import javax.faces.application.ConfigurableNavigationHandler;
import javax.faces.context.FacesContext;
import javax.faces.event.ComponentSystemEvent;
import javax.servlet.http.HttpServletRequest;
import org.hibernate.Session;

/**
 * Komponent zarządzający do obsługi zamówienia gotówkowego.
 * @author Grzesiek
 */
@Named(value = "zam_gotBean")
@SessionScoped
public class Zam_gotBean implements Serializable {

    FacesContext context = FacesContext.getCurrentInstance();
    LogBean bean = (LogBean) context.getApplication().evaluateExpressionGet(context, "#{logBean}", LogBean.class);
    private String imie = bean.getImie();
    private String nazwisko = bean.getNazwisko();
    private String jednostka = bean.getJednostka();
    private boolean nowy = true;
    private float suma;
    private String komentarz;
    private String miejsce;
    private String zrodlo;
    private String uwagi;
    private Session session;
    private int id_zam = 0;
    private ArrayList<SpecyfikacjaZamowienia> specList = new ArrayList<SpecyfikacjaZamowienia>();
    private ArrayList<Zalaczniki> zalacznikiList = new ArrayList<Zalaczniki>();
    Zam_got zg = null;

    public String getUwagi() {
        return uwagi;
    }

    public ArrayList<Zalaczniki> getZalacznikiList() {
        return zalacznikiList;
    }

    public void setZalacznikiList(ArrayList<Zalaczniki> zalacznikiList) {
        this.zalacznikiList = zalacznikiList;
    }

    public void setUwagi(String uwagi) {
        this.uwagi = uwagi;
    }

    /** Creates a new instance of Zam_gotBean */
    public Zam_gotBean() {
        zg = new Zam_got();
    }

    /**
     * Dodanie nowego pola na specyfikacje.
     */
    public void dodaj_spec() {
        specList.add(new SpecyfikacjaZamowienia(null, "", "", 0, new Float(0)));

    }

    public boolean saZalaczniki() {
        if (zalacznikiList.isEmpty()) {
            return false;
        } else {
            return true;
        }
    }

    /**
     * Dodanie nowego pola na załącznik.
     */
    public void dodaj_zalacznik() {
        zalacznikiList.add(new Zalaczniki(null, "", "", "", false, null));

    }

    public ArrayList<SpecyfikacjaZamowienia> getSpecList() {
        return specList;
    }

    public void setSpecList(ArrayList<SpecyfikacjaZamowienia> specList) {
        this.specList = specList;
    }

    public String getImie() {
        return imie;
    }

    public void setImie(String imie) {
        this.imie = imie;
    }

    public String getJednostka() {
        return jednostka;
    }

    public int getId_zam() {
        return id_zam;
    }

    public void setId_zam(int id_zam) {
        this.id_zam = id_zam;
    }

    /**
     * Usniecie specyfikacji.
     * Usuwamy także z bazy, jeśli została już tam dodana.
     * @param sz
     */
    public void usun_spec(SpecyfikacjaZamowienia sz) {
        if (sz.getIdspecyfikacjaZamowienia() != null) {
            zg.usun_spec(sz);
        }
        specList.remove(sz);
    }

    /**
     * usniecie zalacznika
     * Usuwamy także z bazy, jeśli został już tam dodany.
     * @param zal
     */
    public void usun_zalacznik(Zalaczniki zal) {
        if (zal.getIdzalaczniki() != null) {
            zg.usun_zalacznik(zal);
        }
        zalacznikiList.remove(zal);
    }

    public void setJednostka(String jednostka) {
        this.jednostka = jednostka;
    }

    public String getKomentarz() {
        return komentarz;
    }

    public void setKomentarz(String komentarz) {
        this.komentarz = komentarz;
    }

    public String getMiejsce() {
        return miejsce;
    }

    public void setMiejsce(String miejsce) {
        this.miejsce = miejsce;
    }

    public String getNazwisko() {
        return nazwisko;
    }

    public void setNazwisko(String nazwisko) {
        this.nazwisko = nazwisko;
    }

    public boolean isNowy() {
        return nowy;
    }

    public void setNowy(boolean nowy) {
        this.nowy = nowy;
    }

    /**
     * Wyliczenie wartości zamówienia poprzez zsumowanie wszsytkich kwot w liscie specyfikacji.
     * @return suma
     */
    public float getSuma() {
        suma = 0;
        for (int i = 0; i < specList.size(); i++) {
            suma += specList.get(i).getKwota();
        }

        return suma;
    }

    public void setSuma(float suma) {
        this.suma = suma;
    }

    public String getZrodlo() {
        return zrodlo;
    }

    public void setZrodlo(String zrodlo) {
        this.zrodlo = zrodlo;
    }

    /**
     * Zapisanie formularza do bazy.
     * @return przekierowanie na strone informującą o powodzeniu
     */
    public String zapisz_zam() {
        zg.dodaj(id_zam, bean.getId_uz(), komentarz, zrodlo, uwagi, suma, miejsce, specList, zalacznikiList);
        return "success";
    }

    /**
     * Uzupenienie formularza z danych zapisanych w bazie.
     * @param zam
     */
    public void uzupelnij_dane(Zamowienia zam) {
        this.komentarz = zam.getKomentarz();
        this.miejsce = zam.getZapotrzebowanies().iterator().next().getDostawca();
        this.suma = zam.getZapotrzebowanies().iterator().next().getKosztBrutto();
        this.uwagi = zam.getUwagidorealizacji();
        this.zrodlo = zam.getZrodlofinansowania();
        specList.clear();
        Iterator<SpecyfikacjaZamowienia> spec_iter = zam.getZapotrzebowanies().iterator().next().getSpecyfikacjaZamowienias().iterator();
        while (spec_iter.hasNext()) {
            specList.add(spec_iter.next());

        }
        zalacznikiList.clear();
        Iterator<Zalaczniki> zalacz_iter = zam.getZalacznikis().iterator();
        while (zalacz_iter.hasNext()) {
            zalacznikiList.add(zalacz_iter.next());

        }
        session.close();
    }

    /**
     * Wyczyszczenie danych z formularza.
     */
    public void wyczysc_dane() {
        this.komentarz = "";
        this.miejsce = "";
        this.suma = 0;
        this.uwagi = "";
        this.zrodlo = "";
        this.id_zam = 0;
        specList.clear();
        zalacznikiList.clear();
        specList.add(new SpecyfikacjaZamowienia(null, "", "", 0, new Float(0)));
        zalacznikiList.add(new Zalaczniki(null, "", "", "", false, null));
    }

    /**
     * Inicjalizacja formularza.
     * @param event
     */
    public void inicjalizuj(ComponentSystemEvent event) {
        if (bean == null) {
            context = FacesContext.getCurrentInstance();
            ConfigurableNavigationHandler handler = (ConfigurableNavigationHandler) context.getApplication().getNavigationHandler();
            handler.performNavigation("brak_dostepu");
        }
        boolean isGET = ((HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest()).getMethod().equals("GET") ? true : false;
        if (isGET) {
        if (id_zam == 0) {
            wyczysc_dane();
        } else {
            session = HibernateUtil.getSessionFactory().openSession();
            Zamowienia zam = (Zamowienia) session.load(Zamowienia.class, id_zam);
            if ((nowy && zam.getStatusy().getIdstatusy() != 1) || (!zam.getUzytkownicy().getLogin().equals(bean.getLogin()) && bean.getUprawnienia().equals("petent"))) {
                context = FacesContext.getCurrentInstance();
                ConfigurableNavigationHandler handler = (ConfigurableNavigationHandler) context.getApplication().getNavigationHandler();
                handler.performNavigation("brak_dostepu");
            }
            uzupelnij_dane(zam);
        }
    }
    }
}
